package cn.com.huzo.service.trade;

import cn.com.huzo.model.entities.trade.ProductionInstructionLinesColourOrderEntity;
import cn.com.huzo.model.entities.trade.ProductionInstructionLinesEntity;
import huzofw.service.GenericManager;
import java.util.List;
import java.util.Map;

/**
 * 生产指示书明细管理服务对象接口。
 *
 * @author 吴旭
 */
public interface ProductionInstructionLinesManager extends GenericManager<ProductionInstructionLinesEntity, String> {

    /**
     * 根据主表标识标识，得到交付明细、指示书明细数据
     *
     * @param headerId 主表标识
     * @return
     * @throws Exception
     */
    Map<String, Object> fetchLinesByHeaderId(Long headerId) throws Exception;

    /**
     * 根据已有颜色行，增加新颜色（相当于拷贝粘贴）。
     *
     * @param headerId 生产指示书ID
     * @param colourId 新增颜色ID
     * @return 增加后的明细
     * @throws java.lang.Exception
     */
    Map<String, Object> insertLinesByNewColour(Long headerId, Long colourId) throws Exception;

    /**
     * 更新生产指示书明细（颜色）
     *
     * @param itemList 要更新的数据
     * @return 更新后的明细
     * @throws java.lang.Exception
     */
    Map<String, Object> updateLinesColour(List<ProductionInstructionLinesEntity> itemList) throws Exception;

    /**
     * 更新生产指示书明细（唛头号）
     *
     * @param itemList 要更新的数据
     * @return 更新后的明细
     * @throws java.lang.Exception
     */
    Map<String, Object> updateLinesShippingMarkNo(List<ProductionInstructionLinesEntity> itemList) throws Exception;

    /**
     * 根据给定的生产指示书标识，取得明细中分配的成品颜色数据
     * <p>
     * @param headerId 生产指示书标识
     * @return 成品颜色数据
     * @throws java.lang.Exception
     */
    List<Map<String, Object>> fetchProductColourFromMoByHeaderId(Long headerId) throws Exception;

    /**
     * 根据给定的款号取得对应生产指示书中分配的成品颜色数据
     * <p>
     * @param productId 产品标识
     * @return 成品颜色数据
     * @throws java.lang.Exception
     */
    List<Map<String, Object>> fetchProductColourFromMoByProductId(Long productId) throws Exception;

    /**
     * 根据给定的款号取得对应生产指示书中的成品尺码数据
     * <p>
     * @param productId 产品标识
     * @return 成品尺码数据
     * @throws java.lang.Exception
     */
    List<Map<String, Object>> fetchProductSizeFromMoByProductId(Long productId) throws Exception;

    /**
     * 取得该生产指示书的颜色顺序
     *
     * @param headerId 生产指示书标识
     * @return
     * @throws java.lang.Exception
     */
    List<ProductionInstructionLinesColourOrderEntity> fetchLinesColourOrderByHeaderId(Long headerId) throws Exception;

    /**
     * 更新生产指示书明细的颜色顺序
     *
     * @param itemList 要更新的数据
     * @return 更新后的生产指示书明细
     * @throws java.lang.Exception
     */
    Map<String, Object> updateLinesColourOrder(List<Map<String, Object>> itemList) throws Exception;
}
